public class test11_12_2 {
    // override 方法重写
    public static void main(String[] args) {
        Horse h = new Horse();
        h.getVehicle();
        h.run();

        Plane p = new Plane();
        p.getVehicle();
        p.run();
    }
}

class Vehicle{
    public void run(){
        System.out.println("跑......");
    }

    public Vehicle getVehicle(){        // 构造方法重写——返回一个交通工具
        System.out.println("获取交通工具");
        return null;
    }
}

class Horse extends Vehicle{
    @Override
    public void run(){
        System.out.println("得得得......");
    }

    @Override
    public Vehicle getVehicle(){
        System.out.println("获取马");
        return null;
    }
}

class Plane extends Vehicle{
    @Override
    public void run(){
        System.out.println("飞飞飞......");
    }

    @Override
    public Vehicle getVehicle(){
        System.out.println("获取飞机");
        return null;
    }
}

/*
 * 学习笔记：
 * override：方法重写
 * 1.重写的方法，方法名、参数列表、返回值类型必须与父类完全一致——"=="
 * 2.重写的方法，访问权限不能比父类中被重写的方法的访问权限更低——">="
 * 3.父类中的私有方法不能被重写
 * 4.父类中的静态方法不能被重写，只能被隐藏
 * 5.子类和父类在同一个包中，子类可以重写父类中的所有方法
 * 6.子类和父类不在同一个包中，子类只能重写父类中的非private方法
 * 7.重写的方法抛出的异常不能比父类中被重写的方法抛出的异常更宽泛——"<="
 */
